/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package classes;

import java.util.Vector;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;

/**
 *
 * @author Bel
 */
public class Pergunta {

    private String descricao;
    private String[] respostas = new String[4];
    //posição do array que contém a resposta correta
    private int respostaCorreta;
    private String nivel;
    private String materia;
    private static Xml xml = new Xml("perguntas.xml");
    private String[] atributos = {"descricao", "materia", "nivel"};
    private String[] atributosDaResposta = {"descricao", "correta"};

    public Pergunta(String descricao, int respostaCorreta, String nivel, String materia) {
        this.descricao = descricao;
        this.respostaCorreta = respostaCorreta;
        this.nivel = nivel;
        this.materia = materia;
    }

    public Pergunta(Element tag) {
        this.descricao = tag.getAttribute("descricao");
        this.materia = tag.getAttribute("materia");
        this.nivel = tag.getAttribute("nivel");
    }

    /**
     * @return the descricao
     */
    public String getDescricao() {
        return descricao;
    }

    /**
     * @param descricao the descricao to set
     */
    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    /**
     * @return the respostas
     */
    public String[] getRespostas() {
        return respostas;
    }

    /**
     * @param respostas the respostas to set
     */
    public void setRespostas(String[] respostas) {
        this.respostas = respostas;
    }

    /**
     * @return the respostaCorreta
     */
    public int getRespostaCorreta() {
        return respostaCorreta;
    }

    /**
     * @param respostaCorreta the respostaCorreta to set
     */
    public void setRespostaCorreta(int respostaCorreta) {
        this.respostaCorreta = respostaCorreta;
    }

    /**
     * @return the nivel
     */
    public String getNivel() {
        return nivel;
    }

    /**
     * @param nivel the nivel to set
     */
    public void setNivel(String nivel) {
        this.nivel = nivel;
    }

    public String getMateria() {
        return materia;
    }

    public void setMateria(String materia) {
        this.materia = materia;
    }

    public void cadastrarPergunta() {
        Document doc = xml.carregaXml();
        Element root = doc.getDocumentElement();
        String nivelParaXML = "";
        switch (nivel) {
            case "Fácil":
                nivelParaXML = "facil";
                break;
            case "Médio":
                nivelParaXML = "medio";
                break;
            case "Difícil":
                nivelParaXML = "dificil";
                break;
        }
        Object[] valores = {descricao, materia, nivelParaXML};
        Element pergunta = xml.criaNovoElemento("pergunta", atributos, valores);
        root.appendChild(pergunta);
        Element resposta;
        Object[] valoresDaResposta = new Object[2];
        for (int i = 0; i < respostas.length; i++) {
            String correta;
            if (i == respostaCorreta - 1) {
                correta = "sim";
            } else {
                correta = "nao";
            }
            valoresDaResposta[0] = respostas[i];
            valoresDaResposta[1] = correta;
            resposta = xml.criaNovoElemento("resposta", atributosDaResposta, valoresDaResposta);
            pergunta.appendChild(resposta);
        }
        xml.grava();

    }
    
    static Vector<Pergunta> getListadePerguntas(String nivel, String materia) {
        Vector<Pergunta> perguntas = new Vector<>();

        Document doc = xml.carregaXml();

        Element elem = doc.getDocumentElement();
        NodeList nl = elem.getElementsByTagName("pergunta");
        for (int i = 0; i < nl.getLength(); i++) {
            Element tag = (Element) nl.item(i);
            Pergunta pergunta = new Pergunta(tag);
            NodeList nlRespostas = tag.getElementsByTagName("resposta");
            String[] resp = new String[4];
            for (int j = 0;j < nlRespostas.getLength(); j++) {

                Element tagR = (Element) nlRespostas.item(j);
                resp[j] = tagR.getAttribute("descricao");
                if (tagR.getAttribute("correta").equals("sim")) {
                    pergunta.setRespostaCorreta(j + 1);
                }
            }
            pergunta.setRespostas(resp);
            if (pergunta.getNivel().equals(nivel) && pergunta.getMateria().equals(materia)) {
                perguntas.add(pergunta);
            }
        }

        return perguntas;
    }
    
    public static Vector<Pergunta> getListadePerguntas() {
        Vector<Pergunta> perguntas = new Vector<>();

        Document doc = xml.carregaXml();

        Element elem = doc.getDocumentElement();
        NodeList nl = elem.getElementsByTagName("pergunta");
        for (int i = 0; i < nl.getLength(); i++) {
            Element tag = (Element) nl.item(i);
            Pergunta pergunta = new Pergunta(tag);
            NodeList nlRespostas = tag.getElementsByTagName("resposta");
            String[] resp = new String[4];
            for (int j = 0;j < nlRespostas.getLength(); j++) {
                Element tagR = (Element) nlRespostas.item(j);
                resp[j] = tagR.getAttribute("descricao");
                if (tagR.getAttribute("correta").equals("sim")) {
                    pergunta.setRespostaCorreta(j + 1);
                }
            }
            pergunta.setRespostas(resp);
            
            perguntas.add(pergunta);
            
        }

        return perguntas;
    }
}
